package pqt;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Frame;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.RowSorter;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Font;
import java.sql.SQLException;

import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.FileOutputStream;

import javax.swing.JCheckBox;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.itextpdf.text.Paragraph;

import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;

public class ConsultarBloques extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private BaseDeDatos db = BaseDeDatos.getInstance();
	InstanciaBloque instanciaBloque[];
	private Bloque bloque[];
	private InstanciaEnsayo ensayos[];
	JComboBox listadoEstado = new JComboBox();
	JComboBox listadoBloques = new JComboBox();
	JSpinner diaInicio = new JSpinner();
	JSpinner mesInicio = new JSpinner();
	JSpinner anoInicio = new JSpinner();
	JSpinner diaFin = new JSpinner();
	JSpinner mesFin = new JSpinner();
	JSpinner anoFin = new JSpinner();
	JCheckBox usarFecha = new JCheckBox("Fecha:");
	JTable tablaEnsayos;
	private final JButton btnConsultar = new JButton("Consultar");
	
	
	/**
	 * Launch the application.
	 */
	/*public static void main(String[] args) {
		try {
			ConsultarEnsayos dialog = new ConsultarEnsayos();
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
*/
	/**
	 * Create the dialog.
	 */
	public ConsultarBloques(JPanel contentPanel) {
		
				
		//setBounds(100, 100, 1300, 800);
		//getContentPane().setLayout(new BorderLayout());
		//contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		//getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);
		
		JPanel panel = new JPanel();
		panel.setBounds((contentPanel.getWidth()/2)-610, 11, 1220, 610);
		panel.setBorder(new TitledBorder(new LineBorder(new Color(51, 153, 255)), "Consultar Fallas", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		
		contentPanel.add(panel);
		panel.setLayout(null);
		
		listadoEstado.setBounds(287, 49, 169, 20);
		panel.add(listadoEstado);
		
		
		listadoBloques.setBounds(10, 49, 223, 20);
		panel.add(listadoBloques);
		
		JLabel lblPersonal = new JLabel("Bloques:");
		lblPersonal.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblPersonal.setHorizontalAlignment(SwingConstants.LEFT);
		lblPersonal.setBounds(10, 24, 101, 14);
		panel.add(lblPersonal);
		
		JLabel lblEstado = new JLabel("Estado Bloque:");
		lblEstado.setHorizontalAlignment(SwingConstants.LEFT);
		lblEstado.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblEstado.setBounds(287, 24, 101, 14);
		panel.add(lblEstado);
		
		
		diaInicio.setModel(new SpinnerNumberModel(1, 1, 31, 1));
		diaInicio.setBounds(564, 49, 38, 20);
		panel.add(diaInicio);
		
		mesInicio.setModel(new SpinnerNumberModel(1, 1, 12, 1));
		mesInicio.setBounds(614, 49, 38, 20);
		panel.add(mesInicio);
		
		anoInicio.setModel(new SpinnerNumberModel(new Integer(2014), new Integer(2014), null, new Integer(1)));
		anoInicio.setBounds(664, 49, 63, 20);
		panel.add(anoInicio);
		
		diaFin.setModel(new SpinnerNumberModel(1, 1, 31, 1));
		diaFin.setBounds(764, 49, 38, 20);
		panel.add(diaFin);
		
		mesFin.setModel(new SpinnerNumberModel(1, 1, 12, 1));
		mesFin.setBounds(814, 49, 38, 20);
		panel.add(mesFin);
		
		anoFin.setModel(new SpinnerNumberModel(new Integer(2014), new Integer(2014), null, new Integer(1)));
		anoFin.setBounds(864, 49, 63, 20);
		panel.add(anoFin);
		
		JButton btnListar = new JButton("Listar");
		btnListar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String fechaInicio;
				String fechaFin;
				String fecha;
				
				
				try {
					quitarFilas();
					
					
						if(usarFecha.isSelected()) 		
						{	
						fechaInicio=anoInicio.getValue().toString()+"-"+mesInicio.getValue().toString()+"-"+diaInicio.getValue().toString();
						fechaFin=anoFin.getValue().toString()+"-"+mesFin.getValue().toString()+"-"+diaFin.getValue().toString();
						fecha = "BETWEEN '"+fechaInicio+"' AND '"+fechaFin+"'";
						}
					else
						fecha="*";
					
					
					instanciaBloque = db.resultadoBloques(listadoEstado.getSelectedItem().toString(),bloque[listadoBloques.getSelectedIndex()].getId(),fecha);
					
					
					for(int i=0;i<instanciaBloque.length;i++) {
						agregarFila(instanciaBloque[i]);
					}
					
					
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				
				
			}	
		});
		btnListar.setBounds(973, 48, 89, 23);
		panel.add(btnListar);
		
		consultarBloques();
				
		listadoEstado.addItem("OK");
		listadoEstado.addItem("NO OK");
		listadoEstado.setSelectedIndex(1);
		
		
		tablaEnsayos = new JTable(10,7);
		
		
		tablaEnsayos.getTableHeader().setReorderingAllowed(false);
		tablaEnsayos.setFont(new Font("Tahoma", Font.PLAIN, 12));
		MyModel m = new MyModel(null, new String[] {
				"Bloque","Estado","Balanza","Numero de Serie","Operario", "Fecha"}
		);
		tablaEnsayos.setModel(m);
		tablaEnsayos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
		rightRenderer.setHorizontalAlignment(SwingConstants.CENTER);
		
		for(int b=0;b<6;b++)
			tablaEnsayos.getColumnModel().getColumn(b).setCellRenderer(rightRenderer);
		
		//RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(m);
		//tablaEnsayos.setRowSorter(sorter);
		
		JScrollPane scrollPane = new JScrollPane(tablaEnsayos);
		scrollPane.setBounds(10, 98, 1200, 441);
		panel.add(scrollPane);
		usarFecha.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				if(usarFecha.isSelected()) {
					diaFin.setEnabled(true);
					diaInicio.setEnabled(true);
					mesInicio.setEnabled(true);
					mesFin.setEnabled(true);
					anoInicio.setEnabled(true);
					anoFin.setEnabled(true);
					
				}
				else
				{
					diaFin.setEnabled(false);
					diaInicio.setEnabled(false);
					mesInicio.setEnabled(false);
					mesFin.setEnabled(false);
					anoInicio.setEnabled(false);
					anoFin.setEnabled(false);
				}
			}
		});
		usarFecha.setFont(new Font("Tahoma", Font.PLAIN, 14));
		
		
		usarFecha.setBounds(564, 22, 67, 20);
		panel.add(usarFecha);
		btnConsultar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
				if(tablaEnsayos.getSelectedRow()>=0)
				consultarBloque(instanciaBloque[tablaEnsayos.getSelectedRow()],bloque[listadoBloques.getSelectedIndex()].getId());
									
				
			}
		});
		btnConsultar.setBounds(1072, 48, 106, 23);
		
		panel.add(btnConsultar);
		
		JButton btnExportar = new JButton("Exportar");
		btnExportar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				generarExcel(tablaEnsayos);
			}
		});
		btnExportar.setBounds(10, 550, 89, 23);
		panel.add(btnExportar);
		diaFin.setEnabled(false);
		diaInicio.setEnabled(false);
		mesInicio.setEnabled(false);
		mesFin.setEnabled(false);
		anoInicio.setEnabled(false);
		anoFin.setEnabled(false);
	}
	
	public void consultarBloques() {
			
		try {
				
			bloque = db.listarBloques();
				
			for(int i=0;i<bloque.length;i++) {
				listadoBloques.addItem(bloque[i].getNombre());
			}
			
							
				
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	
	}
	
	public void consultarBloque (InstanciaBloque bloque, String idBloque) {
		
		
		try {
			Ensayo ensayo = new Ensayo();
			ensayo.setIdInstanciaEnsayo(Integer.parseInt(bloque.getIdInstanciaEnsayo()));
			ensayo.setIdEnsayo(Integer.parseInt(bloque.getIdEnsayo()));
			db.mostrar(ensayo,ensayo.getIdInstanciaEnsayo(),idBloque);
			
			
			Impresora impresora = Impresora.getInstance();
			impresora.generarInformeBloques(ensayo,bloque);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
	public void agregarFila(InstanciaBloque bloque) {
		
		DefaultTableModel model = (DefaultTableModel) tablaEnsayos.getModel();
		model.addRow(new Object[]{bloque.getBloque(),bloque.getEstado(), bloque.getModeloBalanza(), bloque.getNumeroSerie(), bloque.getOperario(), bloque.getFecha()});
		
		resizeColumnWidth(tablaEnsayos);
	}
	
	public void quitarFilas() {
		
		DefaultTableModel model = (DefaultTableModel) tablaEnsayos.getModel();
		
		while(model.getRowCount()>0)
			model.removeRow(0);
		
		tablaEnsayos.repaint();
		tablaEnsayos.revalidate();
		
	}
	
	private void resizeColumnWidth(JTable table) {
	    final TableColumnModel columnModel = table.getColumnModel();
	    for (int column = 0; column < table.getColumnCount(); column++) {
	        int width = 10; // Min width
	        for (int row = 0; row < table.getRowCount(); row++) {
	            TableCellRenderer renderer = table.getCellRenderer(row, column);
	            Component comp = table.prepareRenderer(renderer, row, column);
	            width = Math.max(comp.getPreferredSize().width, width);
	        }
	        columnModel.getColumn(column).setPreferredWidth(width);
	    }
	}
	
	public class MyModel extends DefaultTableModel 
	{
	   public MyModel(Object[][] data, Object[] cols) 
	   {
	      super(data, cols);
	   }

	   public boolean isCellEditable(int row, int col) 
	   {
	      return false;
	   }
	}


	public void generarExcel(JTable table) {
        HSSFWorkbook libro = new HSSFWorkbook();
        HSSFSheet hoja = libro.createSheet();
       
        JFileChooser chooser;
    	String choosertitle = null;
    	chooser = new JFileChooser(); 
        chooser.setCurrentDirectory(new java.io.File("."));
        chooser.setDialogTitle(choosertitle);
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
       
        if (chooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) 
	         
        	for (int i = 0; i <= table.getRowCount(); i++) {
	            HSSFRow fila = hoja.createRow(i);          
	            if(i==0){
	                for (int j = 0; j < table.getColumnCount(); j++) {
	                    HSSFCell celda = fila.createCell(j);
	                    celda.setCellValue((table.getColumnModel().getColumn(j).getHeaderValue().toString()));
	                }
	            }else{
	                for (int j = 0; j < table.getColumnCount(); j++) {
	                    HSSFCell celda = fila.createCell(j);
	                    if(table.getValueAt(i-1, j)!=null)
	                        celda.setCellValue((table.getValueAt(i-1, j).toString()));
	                   //
	                }
	            }
	                        
	        }
        	for (int j = 0; j < table.getColumnCount(); j++) 
            	hoja.autoSizeColumn(j);
        try {
        	
            FileOutputStream elFichero = new FileOutputStream(chooser.getSelectedFile().toString()+".xls");
            libro.write(elFichero);
            elFichero.close();
            JOptionPane.showMessageDialog(null,"<html><h3>El Archivo se creo con exito </h3></html>" 
        			, "Creacion Exitosa",JOptionPane.INFORMATION_MESSAGE);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
